package com.fintech.user.service;

import java.util.List;
import java.util.Map;

import com.fintech.common.constant.Criteria;
import com.fintech.common.constant.ServiceException;
import com.fintech.common.entity.ResultData;
import com.fintech.user.entity.RealNameAuthentication;
import com.fintech.user.entity.User;

public interface UserService {
	
	/**
	 * @param user
	 */
	public ResultData<User> registerUser(User user);
	
	/**
	 * 客户注册
	 * @param user
	 * @return
	 */
	
	public ResultData<User> clientRegisterUser(User user); 
	
	/**
	 * @param user
	 * @return
	 */
	public ResultData<User> modifyUser(User user);
	
	/**
	 * @param user
	 * @return
	 */
	public ResultData<User> login(User user);
	
	public ResultData<User> loginV2(User user);
	
	public User regionUserLogin(User user);
	
	
	
	/**
	 * @param mobileNo
	 * @param token
	 * @return
	 */
	public ResultData<Boolean> validToken(String mobileNo,String token);

	/**
	 * 验证是否可以注册
	 * @param mobileNo
	 * @return true可注册,不可注册false
	 */
	public ResultData<Boolean> validAccountRegister(String mobileNo,String userType);
	
	/**
	 * @param mobileNo
	 * @param token
	 * @return
	 */
	public ResultData<Boolean> logout(String mobileNo,String token);
	
	/**
	 * @param mobileNo 
	 * @param userType（1，客户经理；2，客户）
	 * @return
	 */
	public User queryUserByMobileNo(String mobileNo,String userType);
	
	/**
	 * 
	 * @param mobileNo
	 * @return
	 */
	public User queryByMobileNo(String mobileNo);
	
	public ResultData<User> validLogin(User user);
	
	/**
	 * 
	 * @param user
	 * @return
	 */
	public User query_by_phone(String username);
	public int updatePwd(User user);
	
	/**
	 * 
	 * @param leve  5门店,4渠道,3城市级机构,2省级机构,1地区机构
	 * @param leveId 对应级别的ID
	 * @return  返回其下所有客户经理
	 */
	@Deprecated
	List<User> queryOrgByLiveId(Integer level,Integer levelId);
	
	/**
	 * 返回客户经理的所有上级机构信息
	 * @param userId
	 * @return
	 */
	@Deprecated
	Map<String,Object> orgIdByUserId(String userId);
	
	User queryUserById(Integer id);
	/**
     * 可查询已逻辑删除的
     * @param id
     * @return
     */
    User queryById(Integer id);
	Integer queryCount(Criteria<User> param);
	
	User queryByOpenId(String openId);
	
	/**
	 * 查询所有的客户经理
	 * @param param
	 * @return
	 */
	public  List<User> findCustManager(Map<String, Object> param);
	
	public Integer findCustManagerCount(Map<String, Object> param);
	
	public ResultData<String> updateUserStatus(User user);
	
    void modifyUserMobile(String mobileNum, String idFintechUmUser);
	 
    void deleteUserByUserId(Integer userId);
    
    void cancelUserByUserId(Integer userId, String reason);
    
    /**
     * 根据身份号码查询User对象
     * @param idCard
     * @return
     */
    User queryByIdCard(String idCard);
    
    public User queryByIdCardAndName(String idCard,String name);
    
    /**
     * 查出机构负责人User
     * @param orgId
     * @return
     */
    public User selectByOrgId(Integer orgId);
    
    public void updateByOrgId(Criteria<User> param,String typeId);
    
    
   /**
    * 查询身份证或者手机号存在的用户
    * @param param
    * @return
    */
    public User selectByCondition(Map<String, Object> param);
    
    
    
    
    /**
     * 查询一类机构注册 
     * @param param
     * @return
     */
     public List<User> selectByChannelCode(String channelCode);
     
     /**
      * 通过userId更新用户设置是否推送消息
      * @param id
      * @return
      */
     public int updateIsMessagePush(Integer id,boolean isMessagePush);
     
     
     /**
      * 通过userId查询用户设置是否推送消息
      * @param id
      * @return
      */
     public boolean selectUserMessageInstall(Integer userId);
     
     /**
      * 保存用户信息(分期商城用)
      * @param user
      * @return
      */
     public int saveUser(User user);
     
     /**
      * 一步注册
      * @param param
      * @return
      */
     public Integer singleStepRegister(Map<String,String> param) throws ServiceException ;
     
	/**
	 * 判断设备号是否符合要求
	 * 
	 * @param user
	 * @return
	 */
     public boolean validateDevice(User user);
     
     RealNameAuthentication findRealNameCount(User user);
     
     int insertGuideInfo(User user);
	
     int updateGuideInfo(User user);

 	/**
 	 * 根据手机号码查询用户信息，不排除无效客户
 	 * @param mobileNo
 	 * @return
 	 */
 	public User queryAllUserByMobileNo(String mobileNo);
 	/**
 	 * 查询用户是否为存量用户
 	 * @param selectType 查询方式
 	 * @param phone
 	 * @param cid
 	 * @param name
 	 * @return
 	 */
 	public Integer queryStockUser(String selectType,String phone,String cid,String name);

}
